package com.logic.modular.game.battle.info.base;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PvpPlayerInfo {
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("对战id")
    private Long matchId;
    @ApiModelProperty("玩家id")
    private Long playerId;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("铜钱加成")
    private Long copperRateCombined = 0L;
    @ApiModelProperty("粮食加成")
    private Long grainRateCombined = 0L;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("排名")
    private Integer ranking = 0;
    @ApiModelProperty("是否为统治者")
    private Integer isRuler = 0;
    @ApiModelProperty("友军uid,包括自己")
    private Set<Long> alliesUidList = new HashSet<>();
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("历史最高拥有城池排名")
    private Integer maxCityRank = 0;
    @ApiModelProperty("历史最高拥有城池")
    private Integer maxCity = 1;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("存活时间排名")
    private Integer survivalTimeRank = 0;
    @ApiModelProperty("是否死亡")
    private Integer isDead = 0;
    @ApiModelProperty("加入游戏时间(毫秒)")
    private Long joinTime = System.currentTimeMillis();
    @ApiModelProperty("存活时间,分钟")
    private Long survivalTime = 0L;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("是否退出")
    private Integer isExit = 0;
    @ApiModelProperty("当前拥有的城池数量排名")
    private Integer currentCityRank;
    @ApiModelProperty("当前拥有的城池")
    private Set<Long> currentCity = new HashSet<>();
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("击败玩家数量排名")
    private Integer killedPlayersRank;
    @ApiModelProperty("累计击败玩家")
    private Set<Long> killedPlayers = new HashSet<>();
    @ApiModelProperty("被谁击杀")
    private Long killedBy;

    @ApiModelProperty("击杀敌兵数量")
    public Long killForces = 0L;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    @ApiModelProperty("累计击败玩家获取的经验")
    private Long totalExp = 0L;
    @ApiModelProperty("累计击败玩家获取的积分")
    private Long totalIntegral = 0L;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * 设置生存时间
     */
    public void setSurvivalTime() {
        if (survivalTime == null) {
            survivalTime = 0L;
            isDead = 0;
            isExit = 0;
            survivalTimeRank = 1;
        }
        if (currentCity == null || currentCity.isEmpty()) {
            survivalTime = (new Date().getTime() - joinTime) / 1000 / 60;
            isDead = 1;
        }
    }

    /**
     * 获取击杀胜点
     */
    public void claimKillPoints(Long playerId, long integral) {
        if (killedPlayers == null) {
            killedPlayers = new HashSet<>();
        }
        if (totalIntegral == null) {
            totalIntegral = 0L;
        }
        killedPlayers.add(playerId);

        totalIntegral += integral;
    }


    public Long obtainSurvivalTime() {
        long ms = System.currentTimeMillis() - joinTime;
        survivalTime = ms / 1000 / 60;
        return survivalTime;
    }
}